Skill

Keyboard এবং Mouse Interaction

Java Technologies - জোগল (JOGL)
289

JOGL (Java OpenGL) হল Java অ্যাপ্লিকেশনগুলিতে 3D গ্রাফিক্স তৈরির জন্য OpenGL লাইব্রেরি। এর সাহায্যে আপনি keyboard এবং mouse এর মাধ্যমে ব্যবহারকারী ইন্টারঅ্যাকশন তৈরি করতে পারেন। এই ইন্টারঅ্যাকশন ব্যবহার করে আপনি গ্রাফিক্স অবজেক্টের অবস্থান পরিবর্তন, ঘূর্ণন, এবং অন্যান্য এনিমেশন কার্যক্রম পরিচালনা করতে পারেন।

এই গাইডে, JOGL ব্যবহার করে কীভাবে keyboard এবং mouse এর মাধ্যমে ইন্টারঅ্যাকশন তৈরি করা যায়, তা দেখানো হবে।


Keyboard Interaction in JOGL


Keyboard Interaction ব্যবহারের মাধ্যমে ব্যবহারকারী কীভাবে অবজেক্ট নিয়ন্ত্রণ করবে, তা নির্ধারণ করা হয়। আপনি GLCanvasKeyListener ব্যবহার করে কী প্রেস করার ইভেন্ট গুলি ক্যাপচার করতে পারেন।

Keyboard Interaction Example:

এখানে, একটি কিউব তৈরি করা হয়েছে যা W, A, S, D কী দিয়ে স্থানান্তরিত হবে এবং R কী দিয়ে তার আঙ্গিক ঘোরানো যাবে।

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyboardInteractionExample implements GLEventListener {

    private float angle = 0.0f;
    private float xPosition = 0.0f;
    private float yPosition = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color to black
        gl.glEnable(GL.GL_DEPTH_TEST);  // Enable depth testing for 3D rendering
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  // Clear the screen
        gl.glLoadIdentity();  // Reset transformations

        gl.glTranslatef(xPosition, yPosition, -6.0f);  // Move the object back along the Z-axis

        gl.glRotatef(angle, 1.0f, 1.0f, 0.0f);  // Apply rotation on the X and Y axes

        // Draw the cube
        gl.glBegin(GL2.GL_QUADS);

        // Front face
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Red color
        gl.glVertex3f(-1.0f, 1.0f, 1.0f);
        gl.glVertex3f( 1.0f, 1.0f, 1.0f);
        gl.glVertex3f( 1.0f, -1.0f, 1.0f);
        gl.glVertex3f(-1.0f, -1.0f, 1.0f);

        // Other faces...

        gl.glEnd();

        angle += 0.2f;  // Update the angle for the next frame
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(0, 0, width, height);  // Set the viewport size
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {}

    public static void main(String[] args) {
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new KeyboardInteractionExample());

        canvas.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();
                if (key == KeyEvent.VK_W) {
                    // Move up on the Y-axis
                    yPosition += 0.1f;
                } else if (key == KeyEvent.VK_S) {
                    // Move down on the Y-axis
                    yPosition -= 0.1f;
                } else if (key == KeyEvent.VK_A) {
                    // Move left on the X-axis
                    xPosition -= 0.1f;
                } else if (key == KeyEvent.VK_D) {
                    // Move right on the X-axis
                    xPosition += 0.1f;
                } else if (key == KeyEvent.VK_R) {
                    // Rotate
                    angle += 10.0f;
                }
            }
        });

        // Set up the JFrame to contain the canvas
        JFrame frame = new JFrame("Keyboard Interaction Example");
        frame.getContentPane().add(canvas);
        frame.setSize(800, 600);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

ব্যাখ্যা:

  • KeyListener: KeyAdapter ব্যবহার করা হয়েছে যা keyPressed() মেথডের মাধ্যমে কী প্রেস করার সময় সংশ্লিষ্ট কার্যক্রম চালায়।
  • W, A, S, D Keys: এই কীগুলির মাধ্যমে কিউবটি অনুভূমিক এবং উল্লম্বভাবে স্থানান্তরিত হয়। W এবং S কীগুলি Y-অক্ষের উপরে এবং নিচে চলতে সাহায্য করে, আর A এবং D কীগুলি X-অক্ষ বরাবর চলতে সাহায্য করে।
  • R Key: R কী দিয়ে কিউবটির আঙ্গিক পরিবর্তন (rotation) হয়।

Mouse Interaction in JOGL


Mouse Interaction ব্যবহার করে আপনি অবজেক্টের উপর ইন্টারঅ্যাকশন করতে পারেন, যেমন কন্ট্রোল প্যানেল, জুম ইন/আউট, অথবা অবজেক্টকে ঘোরানো। JOGL তে MouseListener বা MouseMotionListener ব্যবহার করা হয় মাউসের ইভেন্টগুলিকে ক্যাপচার করতে।

Mouse Interaction Example:

এখানে একটি mouse drag ইন্টারঅ্যাকশন যোগ করা হয়েছে, যেখানে মাউসের মাধ্যমে কিউব ঘোরানো যাবে।

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseInteractionExample implements GLEventListener {

    private float angleX = 0.0f;
    private float angleY = 0.0f;
    private int prevX, prevY;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
        gl.glEnable(GL.GL_DEPTH_TEST);  // Enable depth testing for 3D rendering
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  // Clear the screen
        gl.glLoadIdentity();  // Reset transformations

        gl.glTranslatef(0.0f, 0.0f, -6.0f);  // Move the object back along the Z-axis
        gl.glRotatef(angleX, 1.0f, 0.0f, 0.0f);  // Rotate around the X-axis
        gl.glRotatef(angleY, 0.0f, 1.0f, 0.0f);  // Rotate around the Y-axis

        // Draw a 3D Cube
        gl.glBegin(GL.GL_QUADS);
        
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Red color
        gl.glVertex3f(-1.0f, 1.0f, 1.0f);
        gl.glVertex3f( 1.0f, 1.0f, 1.0f);
        gl.glVertex3f( 1.0f, -1.0f, 1.0f);
        gl.glVertex3f(-1.0f, -1.0f, 1.0f);

        // Other faces...

        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(0, 0, width, height);  // Set the viewport size
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {}

    public static void main(String[] args) {
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new MouseInteractionExample());

        canvas.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                prevX = e.getX();
                prevY = e.getY();
            }
        });

        canvas.addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                int deltaX = e.getX() - prevX;
                int deltaY = e.getY() - prevY;

                // Rotate object based on mouse movement
                angleX += deltaY * 0.5f;
                angleY += deltaX * 0.5f;

                prevX = e.getX();
                prevY = e.getY();
            }
        });

        // Set up the JFrame to contain the canvas
        JFrame frame = new JFrame("Mouse Interaction Example");
        frame.getContentPane().add(canvas);
        frame.setSize(800, 600);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

ব্যাখ্যা:

  • MouseListener: মাউস প্রেস করার সময় mousePressed() মেথডে বর্তমান পজিশন (x, y) ধারণ করা হয়।
  • MouseMotionListener: mouseDragged() মেথডে মাউস ড্র্যাগ করার সময় মাউসের গতির উপর ভিত্তি করে অবজেক্টটির ঘূর্ণন (angleX, angleY) নিয়ন্ত্রণ করা হয়।

সারাংশ


JOGL এর মাধ্যমে Keyboard এবং Mouse এর ইন্টারঅ্যাকশন ব্যবহার করে 3D গ্রাফিক্সের অবজেক্ট নিয়ন্ত্রণ করা যায়। KeyListener ব্যবহার করে কী প্রেসের মাধ্যমে অবজেক্টের স্থানান্তর বা ঘূর্ণন করা যায়, এবং MouseListener এবং MouseMotionListener ব্যবহার করে মাউস ড্র্যাগের মাধ্যমে অবজেক্টের ঘূর্ণন বা অন্যান্য ক্রিয়াকলাপ পরিচালনা করা যায়। এই ইন্টারঅ্যাকশনগুলো interactive graphics এবং game development এর জন্য খুবই উপকারী।

Content added By

JOGL এ Keyboard এবং Mouse Event Handling

321

JOGL (Java OpenGL) হল Java এর জন্য একটি লাইব্রেরি যা OpenGL গ্রাফিক্স API-এর সাথে ইন্টারফেস করে। Keyboard এবং Mouse Event Handling JOGL ব্যবহার করে গ্রাফিক্স অ্যাপ্লিকেশনগুলির ইন্টারঅ্যাকশন যোগ করার জন্য গুরুত্বপূর্ণ। ব্যবহারকারীর ইনপুট, যেমন কীবোর্ড এবং মাউসের মাধ্যমে নিয়ন্ত্রণ, অবজেক্টের অবস্থান পরিবর্তন, রোটেশন, স্কেলিং ইত্যাদি কার্যক্রমে সহায়ক।

এই গাইডে, আমরা JOGL ব্যবহার করে কিভাবে Keyboard এবং Mouse Event Handling করতে হয় তা দেখাব।


1. Keyboard Event Handling


Keyboard Event Handling কীবোর্ড ইনপুটের মাধ্যমে বিভিন্ন অ্যাকশনের ট্রিগার তৈরি করতে ব্যবহৃত হয়। JOGL তে কীবোর্ড ইনপুট নিয়ে কাজ করার জন্য KeyListener বা KeyAdapter ব্যবহার করা হয়।

Keyboard Input Example:

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyboardExample implements GLEventListener {

    private float angle = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
        gl.glEnable(GL.GL_DEPTH_TEST);  // Enable depth testing for 3D rendering
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  // Clear the canvas
        gl.glLoadIdentity();  // Reset transformations

        gl.glTranslatef(0.0f, 0.0f, -5.0f);  // Move object backwards
        gl.glRotatef(angle, 1.0f, 1.0f, 0.0f);  // Rotate object
        
        // Draw a 3D Cube
        gl.glBegin(GL.GL_QUADS);
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Red color
        gl.glVertex3f(-1.0f, -1.0f, 1.0f);
        gl.glVertex3f( 1.0f, -1.0f, 1.0f);
        gl.glVertex3f( 1.0f,  1.0f, 1.0f);
        gl.glVertex3f(-1.0f,  1.0f, 1.0f);
        gl.glEnd();

        angle += 0.5f;  // Increase angle for rotation
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(0, 0, width, height);  // Adjust the viewport size
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {
        // Cleanup resources if needed
    }

    public static void main(String[] args) {
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new KeyboardExample());
        canvas.setSize(800, 600);

        // Set up a JFrame to contain the canvas
        JFrame frame = new JFrame("Keyboard Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setSize(800, 600);
        frame.setVisible(true);

        // Add a KeyListener to handle keyboard events
        canvas.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    // Rotate object left when the left arrow key is pressed
                    angle -= 5.0f;
                } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    // Rotate object right when the right arrow key is pressed
                    angle += 5.0f;
                }
            }
        });

        canvas.setFocusable(true);  // Make sure the canvas can receive keyboard focus
    }
}

ব্যাখ্যা:

  • KeyListener: কীবোর্ড ইনপুটের জন্য KeyListener ব্যবহার করা হয়েছে, যা কীবোর্ডের কী প্রেস ইভেন্ট ট্র্যাক করে। এখানে KeyAdapter ব্যবহার করা হয়েছে, যাতে keyPressed মেথডে নির্দিষ্ট কী প্রেস হলে আমরা কিউবের ঘূর্ণন কোণ পরিবর্তন করতে পারি।
  • keyPressed(KeyEvent e): এই মেথডের মধ্যে কীবোর্ডের কোনো কী প্রেস হলে তাকে ট্র্যাক করা হয় এবং এর মাধ্যমে কিউবের rotation কোণ পরিবর্তন করা হয়।

2. Mouse Event Handling


Mouse Event Handling এর মাধ্যমে মাউসের ইনপুট ট্র্যাক করা হয়, যেমন মাউসের ক্লিক, মুভমেন্ট বা ড্র্যাগ ইত্যাদি। JOGL এ মাউস ইভেন্ট হ্যান্ডলিং করার জন্য MouseListener এবং MouseMotionListener ইন্টারফেস ব্যবহার করা হয়।

Mouse Input Example:

import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseExample implements GLEventListener {

    private float angle = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
        gl.glEnable(GL.GL_DEPTH_TEST);  // Enable depth testing for 3D rendering
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  // Clear the canvas
        gl.glLoadIdentity();  // Reset transformations

        gl.glTranslatef(0.0f, 0.0f, -5.0f);  // Move object backwards
        gl.glRotatef(angle, 1.0f, 1.0f, 0.0f);  // Rotate object
        
        // Draw a 3D Cube
        gl.glBegin(GL.GL_QUADS);
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Red color
        gl.glVertex3f(-1.0f, -1.0f, 1.0f);
        gl.glVertex3f( 1.0f, -1.0f, 1.0f);
        gl.glVertex3f( 1.0f,  1.0f, 1.0f);
        gl.glVertex3f(-1.0f,  1.0f, 1.0f);
        gl.glEnd();

        angle += 0.5f;  // Increase angle for rotation
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(0, 0, width, height);  // Adjust the viewport size
    }

    @Override
    public void dispose(GLAutoDrawable drawable) {
        // Cleanup resources if needed
    }

    public static void main(String[] args) {
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new MouseExample());
        canvas.setSize(800, 600);

        // Set up a JFrame to contain the canvas
        JFrame frame = new JFrame("Mouse Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setSize(800, 600);
        frame.setVisible(true);

        // Add a MouseListener to handle mouse events
        canvas.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1) {
                    // Rotate object left when the left mouse button is clicked
                    System.out.println("Left Button Clicked");
                } else if (e.getButton() == MouseEvent.BUTTON3) {
                    // Rotate object right when the right mouse button is clicked
                    System.out.println("Right Button Clicked");
                }
            }
        });

        canvas.setFocusable(true);  // Make sure the canvas can receive mouse events
    }
}

ব্যাখ্যা:

  • MouseListener: মাউস ইভেন্টের জন্য MouseAdapter ব্যবহার করা হয়েছে। এখানে mouseClicked(MouseEvent e) মেথড ব্যবহার করা হয়েছে যা মাউসের ক্লিক ইভেন্ট ট্র্যাক করে। আপনি মাউসের বাটন (লেফট, রাইট) অনুযায়ী কোন ইনপুট নিতে পারেন।
  • e.getButton(): এই ফাংশনটি মাউস বাটন ট্র্যাক করে। এখানে BUTTON1 (লেফট ক্লিক) এবং BUTTON3 (রাইট ক্লিক) পরীক্ষা করা হয়েছে।

3. Mouse Motion Event Handling


MouseMotionListener মাউসের movement ট্র্যাক করতে ব্যবহৃত হয়। এর মাধ্যমে মাউসের অবস্থান জানা যায়, যা ইন্টারেক্টিভ গ্রাফিক্সের জন্য সহায়ক।

Mouse Motion Input Example:

canvas.addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseMoved(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse moved to: (" + x + ", " + y + ")");
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse dragged at: (" + x + ", " + y + ")");
    }
});

এখানে mouseMoved() এবং mouseDragged() ব্যবহার করা হয়েছে, যেখানে মাউসের অবস্থান (x, y) প্রতি মুভমেন্টে প্রিন্ট হচ্ছে।


সারাংশ


JOGL ব্যবহার করে Keyboard এবং Mouse Event Handling করা খুবই সহজ এবং শক্তিশালী। KeyListener এবং MouseListener ইন্টারফেস ব্যবহার করে কীবোর্ড এবং মাউস ইনপুট ট্র্যাক করা সম্ভব, যার মাধ্যমে গ্রাফিক্স অ্যাপ্লিকেশনগুলিতে ইন্টারঅ্যাকশন যোগ করা যায়। আপনি কীবোর্ডের মাধ্যমে অবজেক্ট রোটেশন বা মাউসের মাধ্যমে অবজেক্টের অবস্থান পরিবর্তন করতে পারেন। JOGL এই ইন্টারফেসগুলো সহজে ব্যবহারের জন্য বিভিন্ন উপায় প্রদান করে, যা গ্রাফিক্স এবং গেম ডেভেলপমেন্টে গুরুত্বপূর্ণ।

Content added By

GLEventListener এর মাধ্যমে User Interaction পরিচালনা

255

JOGL (Java OpenGL) একটি শক্তিশালী লাইব্রেরি যা Java অ্যাপ্লিকেশন থেকে OpenGL রেন্ডারিং সক্ষম করে। JOGL তে GLEventListener ইন্টারফেস ব্যবহৃত হয় গ্রাফিক্স ইভেন্ট (যেমন, রেন্ডারিং, রিসাইজ, ডিসপ্লে চেঞ্জ) হ্যান্ডল করার জন্য। এর মাধ্যমে আপনি User Interaction পরিচালনা করতে পারেন, যেমন মাউস ক্লিক, কীবোর্ড ইনপুট, এবং অন্যান্য ইন্টারঅ্যাকশন যা আপনার গ্রাফিক্স প্রোগ্রাম বা 3D দৃশ্যে পরিবর্তন আনতে সাহায্য করে।

GLEventListener একটি ইভেন্ট হ্যান্ডলিং ইন্টারফেস যা OpenGL গ্রাফিক্স কন্টেক্সট এবং অন্যান্য ইভেন্টের জন্য একটি কাঠামো প্রদান করে। এর মাধ্যমে, আপনি গ্রাফিক্স এবং ইউজার ইনপুটের উপর নির্ভরশীল কাস্টম ইন্টারঅ্যাকশন তৈরি করতে পারবেন।


GLEventListener ইন্টারফেস এবং User Interaction


GLEventListener একটি ইন্টারফেস যা init(), display(), reshape(), এবং displayChanged() মেথডগুলো অন্তর্ভুক্ত করে। তবে, ইউজার ইন্টারঅ্যাকশন যেমন কীবোর্ড এবং মাউস ইনপুট গ্রহণ করতে সাধারণত MouseListener, MouseMotionListener, KeyListener ইন্টারফেসগুলো ব্যবহার করা হয়।

GLEventListener এর মাধ্যমে মাউস, কীবোর্ড এবং অন্যান্য ইনপুটের মাধ্যমে ইউজার ইন্টারঅ্যাকশনকে OpenGL গ্রাফিক্সের সাথে সংযুক্ত করা যায়। এখানে আমরা দেখবো কিভাবে ইউজার ইন্টারঅ্যাকশন পরিচালনা করা যায়।


1. GLEventListener সেটআপ

GLEventListener ইন্টারফেস ব্যবহার করতে প্রথমে OpenGL ইভেন্টগুলোর জন্য একটি ইভেন্ট লিসেনার তৈরি করতে হয়। এটি গ্রাফিক্স কনটেক্সটের সাথে কাজ করে এবং ইভেন্টগুলো পরিচালনা করে।

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

public class UserInteractionGLEventListener implements GLEventListener {

    private float rotation = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);  // Clear the screen

        gl.glPushMatrix(); // Save current transformation
        gl.glRotatef(rotation, 0.0f, 0.0f, 1.0f); // Apply rotation transformation

        // Draw a simple triangle
        gl.glBegin(GL.GL_TRIANGLES);
        gl.glColor3f(1.0f, 0.0f, 0.0f);  // Set color to red
        gl.glVertex2f(0.0f, 1.0f);
        gl.glVertex2f(-1.0f, -1.0f);
        gl.glVertex2f(1.0f, -1.0f);
        gl.glEnd();

        gl.glPopMatrix(); // Restore transformation
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(x, y, width, height);  // Set the viewport
    }

    @Override
    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
        // Handle display changes if needed
    }

    // Method to change rotation based on user input
    public void setRotation(float angle) {
        this.rotation = angle;
    }
}

এখানে:

  • init(): গ্রাফিক্স কনটেক্সট ইনিশিয়ালাইজ করা হয়।
  • display(): রেন্ডারিং লজিকটি এখানে থাকে। গ্রাফিক্স রেন্ডারিং শুরু এবং শেষ করা হয়।
  • reshape(): রিসাইজিং ইভেন্টের সময় এটি কাজ করে এবং viewport এর আকার ঠিক করে।

2. Mouse Interaction (MouseEvent Handling)


মাউস ইন্টারঅ্যাকশন ব্যবহারের জন্য, MouseListener এবং MouseMotionListener ইন্টারফেস ব্যবহার করা হয়। মাউস ক্লিক, মুভমেন্ট ইত্যাদি ঘটলে, এগুলির মাধ্যমে আপনি 2D বা 3D গ্রাফিক্সের সাথে ইন্টারঅ্যাকশন করতে পারেন।

এখানে, আমরা একটি মাউস ক্লিক ইভেন্ট ব্যবহার করে অবজেক্টের রোটেশন পরিবর্তন করতে দেখবো।

MouseListener Example (MouseEvent Handling):

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.media.opengl.GLAutoDrawable;

public class MouseInteractionListener extends MouseAdapter {

    private UserInteractionGLEventListener eventListener;

    public MouseInteractionListener(UserInteractionGLEventListener eventListener) {
        this.eventListener = eventListener;
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // Rotate the object on mouse click
        float x = e.getX();
        float y = e.getY();
        
        // Simple calculation to rotate based on mouse position (normalized)
        float angle = (x + y) % 360;
        eventListener.setRotation(angle);
    }
}

এখানে, mousePressed() মেথডে মাউস ক্লিক করার সময় rotation angle পরিবর্তন করা হচ্ছে, যা পরবর্তী রেন্ডারিং এ 3D অবজেক্টে প্রভাব ফেলবে।


3. Key Interaction (KeyboardEvent Handling)


কীবোর্ড ইনপুট হ্যান্ডল করতে KeyListener ব্যবহার করা হয়। এখানে আমরা কীবোর্ডের ইনপুট দিয়ে গ্রাফিক্সের রঙ পরিবর্তন করতে পারি।

KeyListener Example (KeyboardEvent Handling):

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class KeyInteractionListener extends KeyAdapter {

    private UserInteractionGLEventListener eventListener;

    public KeyInteractionListener(UserInteractionGLEventListener eventListener) {
        this.eventListener = eventListener;
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        
        // Change color or rotation based on key pressed
        if (keyCode == KeyEvent.VK_R) {
            // Change the color to red
            eventListener.setRotation(45.0f);  // Example: Rotate on pressing 'R'
        } else if (keyCode == KeyEvent.VK_B) {
            // Change the color to blue
            eventListener.setRotation(90.0f);  // Example: Rotate on pressing 'B'
        }
    }
}

এখানে, keyPressed() মেথডে কীবোর্ড ইনপুট গ্রহণ করা হচ্ছে এবং এর মাধ্যমে অবজেক্টের রঙ বা রোটেশন পরিবর্তন করা হচ্ছে। উদাহরণস্বরূপ, R কিপ্রেস করলে অবজেক্টের রোটেশন 45 ডিগ্রি পরিবর্তিত হবে।


4. GLDrawable জেএসপি সেটআপ


এখন, GLDrawable ক্লাস এবং এই ক্লাসগুলোকে GLEventListener এর সাথে সংযুক্ত করতে হবে যাতে ইউজার ইন্টারঅ্যাকশনকে গ্রাফিক্স রেন্ডারিংয়ের সাথে একত্রিত করা যায়। সাধারণত, GLCanvas অথবা GLJPanel ব্যবহার করা হয় যেখানে OpenGL রেন্ডারিং হয়।

JOGL Application Example:

import com.jogamp.newt.opengl.GLWindow;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.util.FPSAnimator;

public class JOGLApplication {

    public static void main(String[] args) {
        GLProfile glProfile = GLProfile.get(GLProfile.GL2);  // OpenGL profile
        GLCapabilities capabilities = new GLCapabilities(glProfile);
        
        GLWindow window = GLWindow.create(capabilities);
        window.addGLEventListener(new UserInteractionGLEventListener());
        
        window.setSize(800, 600);  // Set the window size
        window.setVisible(true);
        
        // Add Mouse and Keyboard Listeners
        window.addMouseListener(new MouseInteractionListener(new UserInteractionGLEventListener()));
        window.addKeyListener(new KeyInteractionListener(new UserInteractionGLEventListener()));
        
        FPSAnimator animator = new FPSAnimator(window, 60);  // Set frame rate
        animator.start();
    }
}

এখানে, GLWindow এর মাধ্যমে JOGL উইন্ডো তৈরি করা হয়েছে, যেখানে GLEventListener যুক্ত করা হয়েছে। পাশাপাশি মাউস এবং কীবোর্ড ইনপুট হ্যান্ডলিংয়ের জন্য MouseListener এবং KeyListener যুক্ত করা হয়েছে।


সারাংশ


  • GLEventListener হল JOGL এ OpenGL রেন্ডারিং ইভেন্ট (যেমন, রেন্ডারিং, রিসাইজ) পরিচালনা করার জন্য ব্যবহৃত একটি ইন্টারফেস।
  • User Interaction পরিচালনা করতে MouseListener, MouseMotionListener, এবং KeyListener ইন্টারফেসগুলো ব্যবহার করা হয়, যা গ্রাফিক্স অবজেক্টে রোটেশন, রঙ পরিবর্তন বা অন্যান্য কাস্টম ইন্টারঅ্যাকশন করতে সহায়তা করে।
  • MousePressed এবং KeyPressed ইভেন্ট ব্যবহার করে, মাউস এবং কীবোর্ড ইনপুট অনুযায়ী গ্রাফিক্স কনট্রোল করা যায়।

JOGL ব্যবহার করে আপনি 2D এবং 3D অবজেক্টে ইউজার ইন্টারঅ্যাকশন পরিচালনা করতে পারবেন, যা Java অ্যাপ্লিকেশনে গ্রাফিক্সের সাথে সরাসরি ইন্টারঅ্যাকশন এবং কাস্টমাইজেশন প্রদান করে।

Content added By

উদাহরণ সহ Keyboard এবং Mouse Interaction

263

JOGL (Java OpenGL) Java অ্যাপ্লিকেশনে OpenGL গ্রাফিক্স ব্যবহার করার জন্য একটি লাইব্রেরি, যা আপনাকে গ্রাফিক্স রেন্ডারিং এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করতে সক্ষম করে। GLEventListener এর মাধ্যমে keyboard এবং mouse ইন্টারঅ্যাকশন পরিচালনা করা যায়, যেখানে ইউজার কী-বোর্ড এবং মাউসের ইনপুটের মাধ্যমে গ্রাফিক্সে পরিবর্তন আনতে পারে।

JOGL ইউজার ইন্টারঅ্যাকশন ব্যবস্থাপনা করতে GLEventListener ইন্টারফেসের বিভিন্ন মেথড সরবরাহ করে। এই মেথডগুলো ব্যবহার করে আপনি মাউস ক্লিক, কী-বোর্ড ইনপুট এবং অন্যান্য ইউজার ইন্টারঅ্যাকশন হ্যান্ডেল করতে পারেন।

এখানে, আমরা keyboard এবং mouse এর মাধ্যমে ইউজার ইন্টারঅ্যাকশন পরিচালনার একটি উদাহরণ দেখবো।


Keyboard Interaction উদাহরণ


Keyboard Interaction এর মাধ্যমে আপনি কী-বোর্ডের কী প্রেস করলে OpenGL গ্রাফিক্সে কিছু পরিবর্তন করতে পারেন, যেমন, একটি অবজেক্টের অবস্থান পরিবর্তন করা, রঙ পরিবর্তন করা ইত্যাদি।

Keyboard Interaction উদাহরণ (Cube Move Using Arrow Keys):

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLCanvas;
import com.jogamp.newt.event.KeyAdapter;
import com.jogamp.newt.event.KeyEvent;

public class KeyboardInteractionExample implements GLEventListener {

    private float xPosition = 0.0f;
    private float yPosition = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT); // Clear the screen
        gl.glLoadIdentity();  // Reset the modelview matrix
        gl.glTranslatef(xPosition, yPosition, -6.0f); // Translate the object based on key inputs

        gl.glColor3f(1.0f, 0.0f, 0.0f); // Red color for the object
        gl.glBegin(GL.GL_QUADS); // Drawing a square as a placeholder for a cube
        gl.glVertex2f(-1.0f, 1.0f);
        gl.glVertex2f(1.0f, 1.0f);
        gl.glVertex2f(1.0f, -1.0f);
        gl.glVertex2f(-1.0f, -1.0f);
        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(x, y, width, height);  // Adjust the viewport
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 1.0f, -1.0f); // Set orthogonal projection
        gl.glMatrixMode(GL.GL_MODELVIEW);
    }

    @Override
    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
        // Handle display changes
    }

    public void addKeyListener(GLCanvas canvas) {
        // Add KeyListener to the canvas to listen to keyboard events
        canvas.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();
                if (key == KeyEvent.VK_LEFT) {
                    xPosition -= 0.1f; // Move the object left
                } else if (key == KeyEvent.VK_RIGHT) {
                    xPosition += 0.1f; // Move the object right
                } else if (key == KeyEvent.VK_UP) {
                    yPosition += 0.1f; // Move the object up
                } else if (key == KeyEvent.VK_DOWN) {
                    yPosition -= 0.1f; // Move the object down
                }
            }
        });
    }
}

এখানে:

  • KeyAdapter ব্যবহার করে keyboard events হ্যান্ডেল করা হয়েছে।
  • Arrow keys (left, right, up, down) প্রেস করার মাধ্যমে কিউবের অবস্থান পরিবর্তন করা হচ্ছে।
  • GLCanvas.addKeyListener এর মাধ্যমে কী-বোর্ডের ইনপুট গ্রহণ করা হচ্ছে।

Mouse Interaction উদাহরণ


Mouse Interaction এর মাধ্যমে আপনি মাউসের ইনপুট যেমন ক্লিক বা মুভমেন্ট দিয়ে গ্রাফিক্সে পরিবর্তন আনতে পারেন। মাউসের click, drag, move ইত্যাদি ইনপুট নিয়ে 2D এবং 3D অবজেক্টে পরিবর্তন করা যায়।

Mouse Interaction উদাহরণ (Move Object with Mouse Click):

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLCanvas;
import com.jogamp.newt.event.MouseAdapter;
import com.jogamp.newt.event.MouseEvent;

public class MouseInteractionExample implements GLEventListener {

    private float xPosition = 0.0f;
    private float yPosition = 0.0f;

    @Override
    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set background color to black
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT); // Clear the screen
        gl.glLoadIdentity();  // Reset the modelview matrix
        gl.glTranslatef(xPosition, yPosition, -6.0f); // Translate the object based on mouse click

        gl.glColor3f(0.0f, 1.0f, 0.0f); // Green color for the object
        gl.glBegin(GL.GL_QUADS); // Drawing a square as a placeholder for a cube
        gl.glVertex2f(-1.0f, 1.0f);
        gl.glVertex2f(1.0f, 1.0f);
        gl.glVertex2f(1.0f, -1.0f);
        gl.glVertex2f(-1.0f, -1.0f);
        gl.glEnd();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        gl.glViewport(x, y, width, height);  // Adjust the viewport
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 1.0f, -1.0f); // Set orthogonal projection
        gl.glMatrixMode(GL.GL_MODELVIEW);
    }

    @Override
    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
        // Handle display changes
    }

    public void addMouseListener(GLCanvas canvas) {
        // Add MouseListener to the canvas to listen to mouse events
        canvas.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                // Get the mouse click position
                xPosition = e.getX() / 100.0f - 1.0f;
                yPosition = -e.getY() / 100.0f + 1.0f;
            }
        });
    }
}

এখানে:

  • MouseAdapter ব্যবহার করে mouse events হ্যান্ডেল করা হয়েছে।
  • mousePressed() মেথডের মাধ্যমে মাউস ক্লিকের অবস্থান (X, Y) গ্রহণ করা হয়েছে এবং অবজেক্টের স্থান পরিবর্তন করা হয়েছে।

সারাংশ


  • Keyboard Interaction: KeyAdapter ব্যবহার করে keyboard events যেমন arrow keys, enter, escape কী প্রেস করে গ্রাফিক্সে পরিবর্তন করা যায়।
  • Mouse Interaction: MouseAdapter ব্যবহার করে mouse events যেমন ক্লিক এবং মুভমেন্ট ব্যবহার করে গ্রাফিক্সের অবস্থান পরিবর্তন করা যায়।

JOGL (Java OpenGL) ব্যবহার করে আপনি সহজেই ইউজার ইন্টারঅ্যাকশন পরিচালনা করতে পারেন এবং গ্রাফিক্সে মাউস এবং কী-বোর্ডের ইনপুটের মাধ্যমে ডায়নামিক পরিবর্তন আনতে পারেন। GLEventListener এর মাধ্যমে আপনি OpenGL রেন্ডারিং এবং ইভেন্ট হ্যান্ডলিংয়ের জন্য কার্যকরী কাস্টমাইজেশন করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...